package secondStage.part3.Set.比较器排序Comparator的使用;

import java.util.Comparator;
import java.util.TreeSet;

/**
 * @ClassName: [TreeSetTest1]
 * @Description: Comparator比较器排序使用
 * @Author: [黄劲松]
 * @CreateDate: [2021-04-03]
 * @Version: [v1.0]
 */
/*3.9比较器排序Comparator的使用
   存储学生对象并遍历，创建TreeSet集合使用带参构造方法
   要求:按照年龄从小到大排序，年龄相同时，按照姓名的字母顺序排序
   结论
        用TreeSet集合存储自定义对象，带参构造方法使用的是比较器排序对元素进行排序的
        比较器排序，就是让集合构造方法接收Comparator的实现类对象，重写compare(T o1,T o2)方法
        重写方法时，一定要注意排序规则必须按照要求的主要条件和次要条件来写*/
public class TreeSetTest1 {
    public static void main(String[] args) {
        //创建对象
        TreeSet<Student> ts = new TreeSet<Student>(new Comparator<Student>() {
            @Override   //匿名内部类形式
            public int compare(Student o1, Student o2) {
                int num = o1.getAge() - o2.getAge();
                int num2 = num == 0 ? o1.getName().compareTo(o2.getName()) : num;
                return num2;
            }
        });
        //创建学生对象
        Student s1 = new Student("王昭君", 17);
        Student s2 = new Student("西施", 21);
        Student s3 = new Student("杨玉环", 19);
        Student s4 = new Student("貂蝉", 23);

        Student s5 = new Student("林青霞", 23);
        Student s6 = new Student("林青霞", 23);

        ts.add(s1);
        ts.add(s2);
        ts.add(s3);
        ts.add(s4);
        ts.add(s5);
        //不重复元素
        ts.add(s6);
        //需要重写compareTo()方法才不会ClassCastException报错
        for (Student s : ts) {
            System.out.println(s.getName() + "=" + s.getAge());
        }

    }
}
